/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.tests.keys; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.ui.keys.KeyStroke; import org.eclipse.ui.keys.ParseException; import org.eclipse.ui.keys.SWTKeySupport; import org.eclipse.ui.tests.harness.util.UITestCase; /** * Test for Bug 42035. * * @since 3.0 */ public class Bug42035Test extends UITestCase { /** * Tests the given key event to see if generates the three key strokes * represented by the strings. * * @param keyEvent * The key event to generate key strokes from; must not be * <code>null</code> * @param firstMatch * The text format of the first match; must not be <code>null</code>. * @param secondMatch * The text format of the second match; must not be <code>null</code>. * @param thirdMatch * The text format of the third match; must not be <code>null</code>. * @throws ParseException * If anyone of the text formats provided cannot be parsed. */ private static void testKeyEvent(Event keyEvent, String firstMatch, String secondMatch, String thirdMatch) throws ParseException { KeyStroke desiredKeyStroke = null; KeyStroke actualKeyStroke = null; // Test the first-level match. desiredKeyStroke = KeyStroke.getInstance(firstMatch); //$NON-NLS-1$ actualKeyStroke = SWTKeySupport .convertAcceleratorToKeyStroke(SWTKeySupport .convertEventToUnmodifiedAccelerator(keyEvent)); assertEquals( "Unmodified character with all modifiers doesn't match.", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ // Test the second-level match. desiredKeyStroke = KeyStroke.getInstance(secondMatch); //$NON-NLS-1$ actualKeyStroke = SWTKeySupport .convertAcceleratorToKeyStroke(SWTKeySupport .convertEventToUnshiftedModifiedAccelerator(keyEvent)); assertEquals( "Modified character with no shift doesn't match.", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ // Test the third-level match. desiredKeyStroke = KeyStroke.getInstance(thirdMatch); //$NON-NLS-1$ actualKeyStroke = SWTKeySupport .convertAcceleratorToKeyStroke(SWTKeySupport .convertEventToModifiedAccelerator(keyEvent)); assertEquals( "Modified character with all modifiers doesn't match.", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ } /** * Constructs a new instance of this test case. * * @param testName * The name of the test */ public Bug42035Test(String testName) { super(testName); } /** * Tests that "Ctrl+" generates "Ctrl+", "Ctrl+" and "Ctrl+". * * @throws ParseException * If "CTRL+" cannot be processed. */ public void testCtrl() throws ParseException { Event keyEvent = new Event(); keyEvent.keyCode = 0x40000; keyEvent.character = 0x00; keyEvent.stateMask = SWT.NONE; KeyStroke desiredKeyStroke = KeyStroke.getInstance("CTRL+"); //$NON-NLS-1$ KeyStroke actualKeyStroke = SWTKeySupport .convertAcceleratorToKeyStroke(SWTKeySupport .convertEventToUnmodifiedAccelerator(keyEvent)); assertEquals( "Unmodified character with all modifiers doesn't match", desiredKeyStroke, actualKeyStroke); //$NON-NLS-1$ } /** * Tests that "Ctrl+Enter" generates "Ctrl+Enter", "Ctrl+Enter" and * "Ctrl+Enter". * * @throws ParseException * If "CTRL+ENTER" cannot be processed. */ public void testCtrlEnter() throws ParseException { Event keyEvent = new Event(); keyEvent.keyCode = 0x0D; keyEvent.character = 0x0D; keyEvent.stateMask = SWT.CTRL; testKeyEvent(keyEvent, "CTRL+CR", "CTRL+CR", "CTRL+CR"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } /** * Tests that "Ctrl+J" generates "Ctrl+M", "Ctrl+M" and "Ctrl+M". * * @throws ParseException * If "CTRL+M" cannot be processed. */ public void testCtrlM() throws ParseException { Event keyEvent = new Event(); keyEvent.keyCode = 0x6D; keyEvent.character = 0x0D; keyEvent.stateMask = SWT.CTRL; testKeyEvent(keyEvent, "CTRL+M", "CTRL+M", "CTRL+M"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } /** * Tests that "Ctrl+Shift+2" generates "Ctrl+Shift+2", "Ctrl+@" and * "Ctrl+Shift+@". This simulates a U.S. keyboard layout. * * @throws ParseException * If "CTRL+SHIFT+2", "CTRL+@" or "CTRL+SHIFT+@" cannot be * processed. */ public void testCtrlShift2() throws ParseException { Event keyEvent = new Event(); keyEvent.keyCode = '2'; keyEvent.character = 0x00; keyEvent.stateMask = SWT.CTRL | SWT.SHIFT; testKeyEvent(keyEvent, "CTRL+SHIFT+2", "CTRL+@", "CTRL+SHIFT+@"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } /** * Tests that "Ctrl+Shift+7" generates "Ctrl+Shift+7", "Ctrl+/" and * "Ctrl+Shift+/". This simulates a Swiss-German keyboard layout. * * @throws ParseException * If "CTRL+SHIFT+7", "CTRL+/" or "CTRL+SHIFT+/" cannot be * processed. */ public void testCtrlShift7_SwissGerman() throws ParseException { Event keyEvent = new Event(); keyEvent.keyCode = '7'; keyEvent.character = '/'; keyEvent.stateMask = SWT.CTRL | SWT.SHIFT; testKeyEvent(keyEvent, "CTRL+SHIFT+7", "CTRL+/", "CTRL+SHIFT+/"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } /** * Tests that "Ctrl+Shift+7" generates "Ctrl+Shift+7", "Ctrl+&" and * "Ctrl+Shift+&". This simulates a US keyboard layout. * * @throws ParseException * If "CTRL+SHIFT+7", "CTRL+&" or "CTRL+SHIFT+&" cannot be * processed. */ public void testCtrlShift7_US() throws ParseException { Event keyEvent = new Event(); keyEvent.keyCode = '7'; keyEvent.character = '&'; keyEvent.stateMask = SWT.CTRL | SWT.SHIFT; testKeyEvent(keyEvent, "CTRL+SHIFT+7", "CTRL+&", "CTRL+SHIFT+&"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } }